<?php
// 模型操作数据和数据库操作一样，只不过不需要指定表
//数据库操作返回的列表是一个二维数组，而模型操作返回的是一个结果集

namespace app\text\model;


use think\Db;
use think\Model;
use think\model\concern\SoftDelete;

//测试关联查询
class User extends Model{
    public function profile(){
        //hasOne 表示一对一关联，参数一表示附表  ，参数二外建  默认user_id
        //hasOne('关联模型',['附表外键'],['主表主键'])
        return $this->hasOne('Profile','user_id');}
      public function book(){
          return $this->hasOne('Book','user_id');
        }
    public function roles(){
        //belongToMany('关联模型,'中间表','外键','关联建')
        return $this->belongsToMany('Role','Access','role_id','user_id');
    }


//     public function profile(){
//         //hasMany  一对多查询
//         return $this->hasMany('Profile','user_id','id');
//     }
}
//测试增删改查
//class User extends Model
//{
//     // 设置主键(默认为id)
//       //protected $pk = 'uid';
//
//       //设置其他的数据表
////    protected $table = 'tp_one';
//
//      //开启自动时间戳   配置完毕后，当我们新增一条数据时，无需要新增create_time会自动写入时间  修改数据是，update_time 会自动更新时间
//    //protected $autoWriteTimestamp = true   默认类型为int  修改为datatime
//    protected $autoWriteTimestamp = 'datetime';
//    //如果创建和修改时间戳不是默认定义的，也可以自定义
////    protected $createTime = 'create_at';
////    protected $updateTime = 'update_at';
//
//     //设置只读字段,就是无法被修改的字段设置
//    //除了在模型段设置，也可以动态设置只读字段  见controller/User  update
//    //只读字段只支持模型方法，不支持数据库方法
//    protected $readonly = ['username','email'];
//
//
//     //设置类型转换
//    protected $type = [
//        'price' => 'integer',
//        'status' => 'boolean',
//        'create_time' => 'datetime:Y-m-d'
//    ];
//
//    //设置json字段
//    protected $json = ['details','list'];
//    //设置全局查询
//    //在定义全局查询后，如果某些不需要全局查询可以使用userGlobalScope(false)取消 设置为true则开启全局查询 这个方法必须跟在：：后面
//    protected function base($query){
//        $query->where('status','>','-2');
//    }
//    //初始化
//    protected static function init(){
//        //echo "郭浩佳";
//        self::event('before_update',function($query){
//            echo "开始准备更新！";
//        });
//        self::event('after_update',function($query){
//           echo "更新完毕!";
//        });
//    }
//
//    // 模型数据自动完成
//    //数据的自动完成   auto 表示新增和修改操作，insert 只表示新增，update 只表示修改；
//    //不给默认值的字段需要修改器提供
////    protected $auto = [];
//  protected $insert = ['uid'=>1];
////    protected $update = [];
//
//
//    public function getEmail(){
//
//        //模型内部获取数据，不推荐使用$this->email  而用 getAttr()
//        sefl::where('username','铁鼠')->find()->getAttr('email');
//    }
//
//    //创建一个获取器 status字段
//    public function getStatusAttr($value){
//        $Status = [
//            -1 => '删除',
//            0  => '禁用',
//            1 => '正常',
//            2 => '待审核'
//
//        ];
//        return $Status[$value];
//    }
//
//    //创建一个虚拟字段的获取器，可以对多个字段进行guol
//    public function getNothingAttr($value,$data){
//        $myGet = [
//            -1 => '删除',
//            0  => '禁用',
//            1 => '正常',
//            2 => '待审核'
//        ];
//        return $myGet[$data['status']];
//    }
//
//    //创建一个修改器
//    public function setEmailAttr($value){
//        return strtoupper($value);
//    }
//
//    //创建一个搜索器，邮箱模糊查询
//    //搜索器的第三个参数$data 可以得到withSearch()方法的第二参数值
//    public function searchEmailAttr($query,$value,$data){
//
//         $query->where('email','like',$value.'%');
//         if(isset($data)){
//             $query->order($data['sort']);
//         }
//     }
//
//     //创建一个搜索器，限定时间
//    public function searchCreateTimeAttr($query,$value){
//        $query->whereBetweenTime('create_time',$value[0],$value[1]);
//    }
//
//    //创建一个查询范围
//    public function scopeGenderMale($query){
//        $query->where('gender','男')->limit(5);
//    }
//    public function scopeEmailLike($query,$value){
//        $query->where('email','like','%'.$value.'%');
//    }
//    public function scopePriceGreate($query,$value){
//        $query->where('price','>',$value);
//    }
//
//    //设置软删除
//    //默认情况下，开启了软删除功能的查询，模型会自动屏蔽被软删除的数据
//    use SoftDelete;
//    protected $deleteTime = 'delete_time';
//
//
//}